Computer systems have long used devices to store data. For example, a conventional Hard Disk Drive (HDD) is a data storage device used for storing and retrieving digital information using rapidly rotating discs. The discs are coated with magnetic material that persistently stores respective data. As a respective disc rotates, a magnetic head reads data from or writes data to the magnetic material on the surface of the disk.
Another type of conventional technology to store data is a solid state-drive. As its name suggests, a solid state-drive includes one or more solid-state devices or integrated circuits that are configured to persistently store data. There are no actual moving parts in a solid state-drive. Access to data is performed using an electronic circuit interface.
One reason for the widespread use of a solid state-drives in lieu of rotating disk drives is speed. For example, access to data in non-volatile memory is typically much quicker than access to data stored in a disk (e.g., a physically rotating storage medium). A downside of using non-volatile memory as opposed to disk drive storage is cost. For example, the cost per bit to store data in memory can be considerably higher than the cost per bit to store data on a magnetic media disc of a HDD.
Memory systems typically include many storage elements to store bits of information. Any of the many storage elements can fail over the useful life of the memory system. Proper management of the failing elements in the memory system is important for longevity and usefulness.
One conventional way to reduce the impact of failing memory is to generate parity information for stored data. In certain instances, the parity information can be used to restore unavailable data.
More specifically, according to conventional techniques, a memory system may include a sequence of multiple memory devices to store data. A technique known as data striping can be used to store a respective portion of corresponding data in each of the multiple memory devices in the sequence. In accordance with conventional applications, all storage elements or cells in a respective memory device, such as the last memory device in the sequence, can be reserved to store parity data for stripe data. The parity data can be generated in any suitable manner such as via application of a logical operation to the striped non-parity data. Upon detecting a condition such as the unavailability of data from a particular device in the sequence of memory devices, the parity data in the last memory device can be used to restore the unavailable data.